package evemanutool.gui.manu; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Rectangle; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import evemanutool.constants.DBConstants.QuoteType; import evemanutool.constants.DBConstants.Trend; import evemanutool.data.database.ManuQuote; import evemanutool.gui.general.tabel.ScrollableTablePanel; import evemanutool.gui.general.tabel.TrendEnumCellRenderer; import evemanutool.gui.manu.components.ManuQuoteModel; import evemanutool.gui.manu.filter.QuoteFilterPanel; import evemanutool.gui.manu.frameworks.InspectPanel; import evemanutool.utils.databases.MarketGroupDB; import evemanutool.utils.databases.QuoteDB; import evemanutool.utils.datahandling.GUIUpdater; @SuppressWarnings("serial") public class QuoteListPanel extends JPanel implements GUIUpdater, SwingConstants{ //Constants. private final QuoteType qT; //DB:s. private QuoteDB qdb; //Complete list. private ArrayList<ManuQuote> quoteList; //Additional Quote panels. private InspectPanel bI; private QuoteFilterPanel fP; //Table components. private ScrollableTablePanel<ManuQuote> quotePanel; public QuoteListPanel(QuoteType qT, QuoteDB qdb, MarketGroupDB gdb, InspectPanel bI) { this.qdb = qdb; this.qT = qT; setLayout(new GridLayout(1, 2)); JPanel listPanel = new JPanel(new BorderLayout()); quotePanel = new ScrollableTablePanel<>(new ManuQuoteModel()); quotePanel.getTable().setDefaultRenderer(Trend.class, new TrendEnumCellRenderer(quotePanel.getTable().getRowHeight())); quotePanel.getTable().getSelectionModel().addListSelectionListener(new SelectionListener()); //Setup internal panels. this.bI = bI; fP = new QuoteFilterPanel(gdb); fP.addPropertyChangeListener(QuoteFilterPanel.FILTER_UPDATE, new FilterListener()); //Add to containers. listPanel.add(fP, BorderLayout.NORTH); listPanel.add(quotePanel, BorderLayout.CENTER); add(listPanel); add(bI); } /* * Tries to select the given quote. */ public boolean selectQuote(ManuQuote quote) { //If in the datalist, find the index of the quote. int index; index = quoteList.indexOf(quote); if (index > 0) { //Reset the filter and show all quotes. fP.reset(); setQuotes(quoteList); //Convert index from view to model. index = quotePanel.getSorter().convertRowIndexToView(index); //Select the quote. quotePanel.getTable().setRowSelectionInterval(index, index); //Scroll to row. quotePanel.getTable().scrollRectToVisible( new Rectangle(quotePanel.getTable().getCellRect(index, 0, true))); //Operation successful, return true. return true; } //Operation failed, return false. return false; } @Override public void updateGUI(){ fP.updateGUI(); setQuotes(qdb.getManuQuotes(qT)); } private void setQuotes(Collection<ManuQuote> l) { quoteList = new ArrayList<>(l); quotePanel.setData(fP.filter(l)); } private class FilterListener implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { quotePanel.setData(fP.filter(quoteList)); } } private class SelectionListener implements ListSelectionListener { @Override public void valueChanged(ListSelectionEvent e) { //Sets the selected quote from the showed list (Not the complete). if (!e.getValueIsAdjusting() && quotePanel.getTable().getSelectedRow() >= 0 && quotePanel.getTable().getSelectedRow() < quotePanel.getModel().size()) { bI.setBpo(quotePanel.getModel().getDataAt(quotePanel.getSorter().convertRowIndexToModel(quotePanel.getTable().getSelectedRow())).getBpo()); } } } }